package com.tbit.uqbike.webmanager.dao.core;

import com.tbit.uqbike.object.pojo.BatteryLose;
import com.tbit.uqbike.object.pojo.BatteryMsg;
import com.tbit.uqbike.object.pojo.vo.BatteryMsgVO;
import com.tbit.uqbike.object.pojo.vo.BatteryVO;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;
import java.util.Set;

/**
 * 电池厂家信息
 *
 * @Author:BUGTian
 * @DATE: 2022/5/13
 */
public interface BatteryMsgDao {
    /**
     * 条件查询查询电池厂商信息
     *
     * @param accountId
     * @param batteryNO
     * @param batteryModelId
     * @param startTime
     * @param endTime
     * @param state
     * @return
     */
    List<BatteryMsgVO> query(@Param("accountId") Integer accountId, @Param("batteryNO") String batteryNO, @Param("batteryModelId") Integer batteryModelId, @Param("startTime") Date startTime, @Param("endTime") Date endTime, @Param("state") Integer state, @Param("userCode") String userCode);

    /**
     * 查询已存在的电池
     *
     * @param batteryNO
     * @return
     */
    String queryByBatteryNO(@Param("batteryNO") String batteryNO);

    /**
     * 新增电池
     *
     * @param batteryNO
     * @param accountId
     * @param batteryModelId
     * @param accountUserId
     * @param date
     */
    void insert(@Param("batteryNO") String batteryNO, @Param("accountId") Integer accountId, @Param("batteryModelId") Integer batteryModelId, @Param("accountUserId") Integer accountUserId, @Param("date") Date date);

    /**
     * 修改电池状态
     *
     * @param batteryId
     * @param state
     * @param accountUserId
     * @param updateTime
     */
    void updateState(@Param("batteryId") Integer batteryId, @Param("state") Integer state, @Param("accountUserId") Integer accountUserId, @Param("updateTime") Date updateTime);

    /**
     * 查询已绑定电池
     *
     * @param batteryId
     * @return
     */
    String queryBoundByBatteryID(@Param("batteryId") Integer batteryId);

    /**
     * 删除电池
     *
     * @param batteryId
     */
    void deleteByBatteryId(@Param("batteryId") Integer batteryId);

    /**
     * 根据电池编号查询电池id
     *
     * @param batteryNO
     * @return
     */
    Integer selectBatteryIdByNO(@Param("batteryNO") String batteryNO);

    /**
     * 根据电池id查询电池信息
     *
     * @param batteryId
     * @return
     */
    BatteryMsg selectBatterById(@Param("batteryId") Integer batteryId);

    /**
     * 根据电池编号和区域id查询电池信息
     *
     * @param batteryNo 电池编号
     * @return 电池信息
     */
    BatteryMsg selectBatterMsgByNoAndAccountId(String batteryNo, Integer accountId);

    /**
     * 批量查询
     * @param accountId 区域id
     * @param batteryNoList 电池编号列表
     * @return list
     */
    List<BatteryMsgVO> queryByNOList(@Param("accountId") Integer accountId, @Param("batteryNoList") Set<String> batteryNoList);

    /**
     * 批量修改电池状态
     * @param batteryVOList batteryVo
     */
    void batchUpdateByNo(@Param("batteryVOList") List<BatteryVO> batteryVOList);

    /**
     * 批量新增电池丢失记录
     * @param batteryLoseList batteryLose
     */
    void batchAddBatteryLose(@Param("batteryLoseList") List<BatteryLose> batteryLoseList);

    /**
     * 批量删除电池分组
     * @param operationList operationList
     */
    void batchDelBatteryGroup(@Param("operationList") List<String> operationList);

    /**
     * 批量删除
     * @param batteryNos 电池编号
     */
    void batchDelByBatteryNo(@Param("batteryNos") List<String> batteryNos);
}
